package com.cms.recursoshumanos.activity.catalogo.carrito;

import java.lang.ref.WeakReference;
import java.util.List;

import com.example.frontendrecursoshumanos.R;
import com.cms.recursoshumanos.activity.main.MainRecursosHumanosActivity;
import com.cms.recursoshumanos.cache.CarritoCompraCache;
import com.cms.recursoshumanos.cache.UserInfoCache;
import com.cms.recursoshumanos.component.dialog.CustomEditArticuloDialog;
import com.cms.recursoshumanos.component.dialog.CustomEditArticuloDialog.EditDialogListener;
import com.cms.recursoshumanos.constant.Constant;
import com.cms.recursoshumanos.handler.CarritoCompraScreenHandler;
import com.cms.recursoshumanos.handler.ImagenesHandler;
import com.cms.recursoshumanos.object.ArticuloCarrito;
import com.cms.recursoshumanos.object.Usuario;
import com.cms.recursoshumanos.object.list.ListaArticuloCarrito;
import com.cms.recursoshumanos.utilities.Tool;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class CarritoCompraActivity extends MainRecursosHumanosActivity
{
	
	private static CatalogoAdapter adaptador;
	private static ListView listViewArticulo;
	private static TextView textoMonto;
	private static ListaArticuloCarrito listado;
	private static LinearLayout layout_principal;
	private static Usuario elUsuario;
	private static ProgressDialog dialog;
	
	private setSolicitudCompraAsync asyncSolicitudCompraTask;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_lista_carrito);
		elUsuario = UserInfoCache.getInstance().getUsuario();
		listado = CarritoCompraCache.getInstance().getListaArticulo();
		setComponents();
	}
	@Override
	protected void onResume() 
	{
		super.onResume();
		if (elUsuario == null)
		{
			elUsuario = UserInfoCache.getInstance().getUsuario();
		}
		if (listado == null)
		{
			listado = CarritoCompraCache.getInstance().getListaArticulo();
		}
	}
	
	public void onProcesarCompraClick (View v)
    {
		if (listado.cantElementListaArticulo() > 0)
		{
			asyncSolicitudCompraTask = new setSolicitudCompraAsync(elUsuario);
			asyncSolicitudCompraTask.execute();
		}
		else
		{
			Toast.makeText(getAppContext(), "No se encuentran articulos en el carrito",Toast.LENGTH_LONG).show();
		}
	}
	public void onLimpiarClick (View v)
    {
		if (listado.cantElementListaArticulo() > 0)
		{
			listado.limpiar_lista();
			setListaArticulo();
		}
	}


	public void setComponents()
	{
		layout_principal = (LinearLayout) findViewById(R.id.llInfolMonto);
		textoMonto = (TextView) layout_principal.findViewById(R.id.tvValueMontoCarrito);
		listViewArticulo = (ListView) findViewById(R.id.lvCarrito);
		
		setListaArticulo();
	}
	public void setListaArticulo()
	{
		textoMonto.setText(Float.toString(listado.getCostoCarrito()));
		adaptador = new CatalogoAdapter(this, listado.getListaArticulo());
		listViewArticulo.setAdapter(adaptador);
	}
	public class CatalogoAdapter extends ArrayAdapter<ArticuloCarrito> 
	{
	    LayoutInflater mInflater ;  
	    private List<ArticuloCarrito> mItems ;
	    private ViewHolder holder;
	 
	    public CatalogoAdapter  ( Context context , List<ArticuloCarrito> items)  
	    {
	        super ( context, -1, items )  ;
	        this.mItems = items ;
	        this.mInflater = LayoutInflater.from(context) ;
	    }
	    
	    @ Override
	    public View getView ( final int position, View convertView, ViewGroup parent )  
	    {
	            // Inflate the custom view
	    	/*View v = listViewArticulo.getChildAt(position - listViewArticulo.getFirstVisiblePosition());//convertView;
	    	if ( v == null)
    		{
	    		
	    		v =   mInflater.inflate( R.layout.elementos_lista_objeto_2right_item,null);    		
	    		v.setOnClickListener(new OnClickListener() 
	    		{
					
					@Override
					public void onClick(View v) 
					{
						
						goDetailArticulo(.getInstance().
											getListaArticulo().
											getArticuloAtIndex(position).
											getIdArticulo());
					}
				});
	    		v.setOnLongClickListener(new OnLongClickListener() 
	    		{
					
					@Override
					public boolean onLongClick(View v) 
					{
						showPopUpAddCarrito(mItems.get(position));
						return true;
					}
				});
		    	
	    		holder = new ViewHolder();
	    		
	    		holder.relative_nombre_principal= (RelativeLayout) v.findViewById(R.id.rlNombreObjeto);
	    		holder.relative_nombre_right = (RelativeLayout) v.findViewById(R.id.rlNombreRightObjeto);
	    		
	    		holder.tipoArticulo = (TextView) holder.relative_nombre_principal.findViewById(R.id.tvNombreDetalle);
	    		holder.nombreArticulo = (TextView) holder.relative_nombre_principal.findViewById(R.id.tvNombrePrincipal);

	    		holder.cantidadArticulo = (TextView) holder.relative_nombre_right.findViewById(R.id.tvNombreRight);
	    		holder.precioArticulo = (TextView) holder.relative_nombre_right.findViewById(R.id.tvDetalleRight);

	    		holder.imagen_foto = (ImageView) v.findViewById(R.id.ivFotoObjeto);
				holder.progreso = (ProgressBar) v.findViewById(R.id.pBImagen);
				
				v.setTag(holder);
	    		
    		}
	    	else
	    	{
	    		holder = (ViewHolder) v.getTag();
	    	}
	    	
    		
    		holder.nombreArticulo.setText(mItems.get(position).getArticulo().getNombreArticulo());
    		holder.tipoArticulo.setText(mItems.get(position).getArticulo().getTipoArticulo().getNombreTipoArticulo());
    		
    		holder.cantidadArticulo.setText("Cant: "+mItems.get(position).getCantidadSeleccionada());
    		holder.precioArticulo.setText("BsF. "+mItems.get(position).getMontoTotal());
    		
    		holder.progreso.setVisibility(View.VISIBLE);
			holder.imagen_foto.setVisibility(View.INVISIBLE);
    		
    		if (holder.imagen_foto != null)
    		{
    			if (mItems.get(position).getArticulo().getFotoArticulo() == null)
    			{
    				new DownloadImageTask(CarritoCompraActivity.this).execute(position);
    			}
    			else
    			{
    				holder.imagen_foto.setVisibility(View.VISIBLE);
					holder.progreso.setVisibility(View.INVISIBLE);
    				holder.imagen_foto.setImageBitmap(mItems.get(position).getArticulo().getFotoArticulo());

    			}
    		}
	        return v ;*/
	    	
	    	convertView =   mInflater.inflate( R.layout.elementos_lista_objeto_2right_item,null);    		
	    	convertView.setOnClickListener(new OnClickListener() 
    		{
				
				@Override
				public void onClick(View v) 
				{
					
					/*goDetailArticulo(.getInstance().
										getListaArticulo().
										getArticuloAtIndex(position).
										getIdArticulo());*/
				}
			});
    		convertView.setOnLongClickListener(new OnLongClickListener() 
    		{
				
				@Override
				public boolean onLongClick(View v) 
				{
					showPopUpAddCarrito(mItems.get(position));
					return true;
				}
			});
    		
    		convertView.setOnLongClickListener(new OnLongClickListener() 
    		{
				
				@Override
				public boolean onLongClick(View v) 
				{
					
					showPopUpAddCarrito(mItems.get(position));
					
					return true;
				}
			});
	    	
	    	if (convertView.getTag() == null)
	    	{
	    		holder = new ViewHolder();
	    		
	    		holder.imagen_foto = (ImageView) convertView.findViewById(R.id.ivFotoObjeto);
				holder.progreso = (ProgressBar) convertView.findViewById(R.id.pBImagen);
	    		
	    		holder.tipoArticulo = (TextView) convertView.findViewById(R.id.tvNombreDetalle);
	    		holder.nombreArticulo = (TextView) convertView.findViewById(R.id.tvNombrePrincipal);

	    		holder.cantidadArticulo = (TextView) convertView.findViewById(R.id.tvNombreRight);
	    		holder.precioArticulo = (TextView) convertView.findViewById(R.id.tvDetalleRight);
	    		holder.flag_buscar = true;

	    	}
	    	else
	    	{
	    		holder = (ViewHolder) convertView.getTag();
	    	}
    		
	    	
	    	holder.nombreArticulo.setText(mItems.get(position).getArticulo().getNombreArticulo());
    		holder.tipoArticulo.setText(mItems.get(position).getArticulo().getTipoArticulo().getNombreTipoArticulo());
    		
    		holder.cantidadArticulo.setText("Cant: "+mItems.get(position).getCantidadSeleccionada());
    		holder.precioArticulo.setText("BsF. "+mItems.get(position).getMontoTotal());
    		
    		holder.progreso.setVisibility(View.VISIBLE);
			holder.imagen_foto.setVisibility(View.GONE);
    		
			if (holder.imagen_foto != null)
			{
				if (mItems.get(position).getArticulo().getFotoArticulo() == null)
				{
					if (holder.flag_buscar) 
					{
						holder.flag_buscar = false;
						new DownloadImageTask(CarritoCompraActivity.this).execute(position);
					}
				}
				else
				{
					holder.imagen_foto.setVisibility(View.VISIBLE);
					holder.progreso.setVisibility(View.GONE);
    				holder.imagen_foto.setImageBitmap(mItems.get(position).getArticulo().getFotoArticulo());
				}
			}
			convertView.setTag(holder);
	        return convertView ;
	    	
	    }
	    private class ViewHolder 
	    {   
        	ImageView imagen_foto;
			ProgressBar progreso;
    		TextView tipoArticulo;
    		TextView nombreArticulo;
    		TextView cantidadArticulo;
    		TextView precioArticulo;
    		boolean flag_buscar;
        }
	}
	
	private static class DownloadImageTask extends AsyncTask<Integer, Void, Bitmap> 
	{
		WeakReference<CarritoCompraActivity> context;
		@SuppressWarnings("unused")
		CarritoCompraActivity activity;
		int index;
	 
		public DownloadImageTask(CarritoCompraActivity activity) 
		{	
			context = new WeakReference<CarritoCompraActivity>(activity);
			this.activity = context.get();
		}
    	
		@Override
		protected Bitmap doInBackground(Integer... position) 
		{
			index = position[0];        	
			ImagenesHandler handler = new ImagenesHandler();
			ArticuloCarrito elArticuloAux = (adaptador.getItem(index));
			return handler.GetImage(elArticuloAux.getArticulo().getUrlFoto());
		}
		
		@Override
		protected void onPostExecute(Bitmap poster) 
		{  
			/*View itemView = null;
			ImageView itetmImageView = null;
			int index_list_v = listViewArticulo.getFirstVisiblePosition();
			int index_real = index - index_list_v;
			ArticuloCarrito elArticulo = listado.getArticuloAtIndex(index);
	        //agarra el listview y me devuelve el item en una posicion donde se encuentra
	        if(listViewArticulo != null)
	        {
        		itemView = listViewArticulo.getChildAt(index_real);
	        }
	        
	        if (itemView != null)
	        {
	        	itetmImageView = (ImageView) itemView.findViewById(R.id.ivFotoObjeto);
	        	if (itetmImageView != null)
	        	{
        			itetmImageView.setVisibility(View.VISIBLE);
	        		if(poster != null)
		        	{
	        			((ProgressBar) itemView.findViewById(R.id.pBImagen)).setVisibility(View.INVISIBLE);
	        			itetmImageView.setImageBitmap(poster);
	        			elArticulo.getArticulo().setFotoArticulo(poster);
	        			CarritoCompraCache.getInstance().getListaArticulo().actualizarArticulo(elArticulo);
		        	}
	        	}
	        }*/
			
			View itemView = null;
			ImageView itetmImageView = null;
			int index_list_v = listViewArticulo.getFirstVisiblePosition();
			int index_real = index - index_list_v;
			ArticuloCarrito elArticulo = listado.getArticuloAtIndex(index);
	        //agarra el listview y me devuelve el item en una posicion donde se encuentra
	        if(listViewArticulo != null)
	        {
        		itemView = listViewArticulo.getChildAt(index_real);
	        }
	        
	        if (poster == null)
	        {
	        	poster = BitmapFactory.decodeResource(MainRecursosHumanosActivity.getAppContext().getResources(), R.drawable.avatar_blank);
	        }
	        
	        if (itemView != null)
	        {
	        	itetmImageView = (ImageView) itemView.findViewById(R.id.ivFotoObjeto);
	        	if (itetmImageView != null)
	        	{
        			itetmImageView.setVisibility(View.VISIBLE);
	        		if(poster != null)
		        	{
	        			((ProgressBar) itemView.findViewById(R.id.pBImagen)).setVisibility(View.INVISIBLE);
	        			itetmImageView.setImageBitmap(poster);
	        			itetmImageView.setImageBitmap(poster);
	        			elArticulo.getArticulo().setFotoArticulo(poster);
	        			CarritoCompraCache.getInstance().getListaArticulo().actualizarArticulo(elArticulo);
	        				
		        	}
	        	}
	        }
		}
    }
	public void showPopUpAddCarrito(ArticuloCarrito elArticulo)
	{
		CustomEditArticuloDialog dialog = new CustomEditArticuloDialog(CarritoCompraActivity.this, elArticulo, new EditDialogListener() {
			
			@Override
			public void ready(ArticuloCarrito elArticulo, int cantidad_selec) {
				if (cantidad_selec == 0)
				{
					listado.deleteArticuloAtId(elArticulo.getArticulo().getIdArticulo());
				}
				else
				{
					elArticulo.setCantidadSeleccionado(cantidad_selec);
					listado.actualizarArticulo(elArticulo);
				}
				setListaArticulo();
			}
			
			@Override
			public void cancelled() {
				// TODO Auto-generated method stub
				
			}
		});
		dialog.show();
	}
	private class setSolicitudCompraAsync extends AsyncTask<String, Void, String>
	{
		private Usuario elUsuario;
		
		public setSolicitudCompraAsync(Usuario elUsuario)
		{
			this.elUsuario = elUsuario;
		}
		
	
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(CarritoCompraActivity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(String... arg0) 
		{
			CarritoCompraScreenHandler handler = new CarritoCompraScreenHandler();
			String result = handler.procesarSolicitudCompra(this.elUsuario.getNombre_Usuario(),
																this.elUsuario.getPassword(),
																listado);
			return result;
		}
		
		@Override
		public void onPostExecute(String  result)
		{
		
			String str_result = result;
			
			if (str_result.equals(Constant.CODE_OK))
			{ 
				Toast.makeText(getAppContext(), "Se proceso satisfactoriamente la solicitud, " +
						"chequee su email para mas informacion",Toast.LENGTH_LONG).show();
				listado.limpiar_lista();
				setListaArticulo();
			}
			else 
			{
				Tool.getInstance().showMessage(str_result);
			}
			dialog.cancel();
			this.cancel(true);
		}	
	}
}
